#include <my_header.h>

/* Usage: ./3_seek_tell_dirent pathname */
int main(int argc, char *argv[]){                                  
    ARGS_CHECK(argc, 2);
    DIR *dirp = opendir(argv[1]);
    ERROR_CHECK(dirp ,NULL, "opendir");

    struct dirent *pdirent;
    // 用于记录目录流指针的位置
    long loc;
    while((pdirent = readdir(dirp)) != NULL)
    {
       //  readdir 函数在读取当前目录项并返回dirent结构体
       //  指针后，会自动移动到目录流中的下一个条目。这意
       //  味着每次调用 readdir 后，目录流的内部指针都会向
       //  前移动到下一个条目。
        printf("inode num = %lu, reclen = %hu, type = %u, name = %s\n\n",
               pdirent->d_ino, pdirent->d_reclen,
               pdirent->d_type,pdirent->d_name);
        if(strcmp("file", pdirent->d_name) == 0)
        {
            // 如果当前的目录项表示文件的名字是file，记录文件指针的位置
            loc = telldir(dirp);
        }
    }// 循环结束时，此时指针已经指向了file后面的下一个目录项dir
    printf("-----------------------------\n");  // 分割线
                                                //
    rewinddir(dirp);    // 回到目录流的初始位置  
                        // 回到初始位置只会打印第一个目录项

    seekdir(dirp, loc); // 目录流指针回到记录为位置
    // 获取目录流指针指向的目录项结构体, 并打印信息
    pdirent = readdir(dirp);
    printf("inode num = %lu, reclen = %hu, type = %u, name = %s\n\n",
           pdirent->d_ino, pdirent->d_reclen,
           pdirent->d_type,pdirent->d_name);
    // 关闭目录流
    closedir(dirp);

    return 0;
}


